package evaluatereversepolishnotation

import "strconv"

// 计算逆波兰式
func evalRPN(tokens []string) int {
    // 栈计算
    res := []string{}
    var token string
    for i:=0;i<len(tokens);i++{
        token = tokens[i]
        // 当前token
        if token=="+"{
            // 弹出两个元素+
            t1 := res[len(res)-1]
			t2 := res[len(res)-2]
			res = res[:len(res)-2]
            //转化为数字相加
            a,_ := strconv.Atoi(t1)
			b,_ := strconv.Atoi(t2)  //Atoi好像是返回两个值
            sum := a+b
            res = append(res, strconv.Itoa(sum)) // 结果压入
        }else if token=="-"{
            t1 := res[len(res)-1]
			t2 := res[len(res)-2]
			res = res[:len(res)-2]
            //转化为数字相加
            a,_ := strconv.Atoi(t1)
			b,_ := strconv.Atoi(t2)  //Atoi好像是返回两个值
            sum := b-a
            res = append(res, strconv.Itoa(sum)) // 结果压入
        }else if token == "*" {
            t1 := res[len(res)-1]
			t2 := res[len(res)-2]
			res = res[:len(res)-2]
            //转化为数字相加
            a,_ := strconv.Atoi(t1)
			b,_ := strconv.Atoi(t2)  //Atoi好像是返回两个值
            sum := a*b
            res = append(res, strconv.Itoa(sum)) // 结果压入
        }else if token == "/" {
            t1 := res[len(res)-1]
			t2 := res[len(res)-2]
			res = res[:len(res)-2]
            //转化为数字相加
            a,_ := strconv.Atoi(t1)
			b,_ := strconv.Atoi(t2)  //Atoi好像是返回两个值
            sum := b/a
            res = append(res, strconv.Itoa(sum)) // 结果压入
        }else {
            //是数字，题意保证表达式有效
            res = append(res,token)
        }
    }
    a,_ := strconv.Atoi(res[0])
	return a
}